iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
自我挑戰組

研究visual studio+MSSQL各項技術系列 第 13

物件導向特性:封裝(Encapsulation)、繼承(Inheritance)、多型(Polymorphism)、多載(Overloading)

  • 分享至 

  • xImage
  •  

物件導向特性
封裝(Encapsulation)
抽象:對一件事物只瞭解其外在,而不需瞭解其內部構造或實作方法
封裝的觀念和抽象化類似,但多了安全的概念,使用者只能使用公開的屬性或方法

打個比方來說,以下的程式Deposit、Withdraw、BankAccount為公開的屬性或方法,使用這些函式增減private decimal balance 的數據,而這個balance是私有參數,不能直接修改與瀏覽數值,要透過公開方法取得數值

using System;

class BankAccount
{
    private string accountNumber;
    private decimal balance;

    public BankAccount(string accountNumber, decimal initialBalance)
    {
        this.accountNumber = accountNumber;
        this.balance = initialBalance;
    }

    public decimal GetBalance()
    {
        return balance;
    }

    public void Deposit(decimal amount)
    {
        if (amount > 0)
        {
            balance += amount;
            Console.WriteLine($"存款 {amount} 元成功。新餘額為 {balance} 元。");
        }
        else
        {
            Console.WriteLine("無效的存款金額。");
        }
    }

    public void Withdraw(decimal amount)
    {
        if (amount > 0 && amount <= balance)
        {
            balance -= amount;
            Console.WriteLine($"取款 {amount} 元成功。新餘額為 {balance} 元。");
        }
        else
        {
            Console.WriteLine("無效的取款金額或餘額不足。");
        }
    }
}

class Program
{
    static void Main()
    {
        BankAccount account = new BankAccount("123456789", 1000);

        Console.WriteLine($"帳戶餘額:{account.GetBalance()} 元");
        account.Deposit(500);
        account.Withdraw(200);
    }
}

繼承(Inheritance)
類別可以繼承另一個類別的屬性和方法,比方說有個動物的類別會吃、睡,有名字與年紀,在這個類別的基礎上再分成狗或貓,狗會旺旺叫而貓會咪咪叫,而在宣告類別的時候都是新增物件後再進行各種處理。

using System;

// 基類 Animal
class Animal
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Animal(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void Eat()
    {
        Console.WriteLine($"{Name}正在吃食物。");
    }

    public void Sleep()
    {
        Console.WriteLine($"{Name}正在睡覺。");
    }
}

// 派生類 Dog
class Dog : Animal
{
    public string Breed { get; set; }

    public Dog(string name, int age, string breed) : base(name, age)
    {
        Breed = breed;
    }

    public void Bark()
    {
        Console.WriteLine($"{Name}正在汪汪叫。");
    }
}

// 派生類 Cat
class Cat : Animal
{
    public string Color { get; set; }

    public Cat(string name, int age, string color) : base(name, age)
    {
        Color = color;
    }

    public void Meow()
    {
        Console.WriteLine($"{Name}正在喵喵叫。");
    }
}

class Program
{
    static void Main()
    {
        // 創建一個 Dog 物件
        Dog myDog = new Dog("小白", 3, "拉布拉多");
        myDog.Eat();
        myDog.Bark();

        // 創建一個 Cat 物件
        Cat myCat = new Cat("咪咪", 2, "橘貓");
        myCat.Sleep();
        myCat.Meow();
    }
}

多型(Polymorphism)
多型也叫同名異式,即使用一個方法名稱,在不同的條件下可以執行不同的動作
以下就是一例

using System;

// 基類 Shape
class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("繪製一個形狀");
    }
}

// 派生類 Circle
class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("繪製一個圓形");
    }
}

// 派生類 Rectangle
class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("繪製一個矩形");
    }
}

class Program
{
    static void Main()
    {
        Shape[] shapes = new Shape[]
        {
            new Circle(),
            new Rectangle()
        };

        foreach (Shape shape in shapes)
        {
            shape.Draw();
        }
    }
}

多載(Overloading):多個方法擁有相同名稱,不同參數,傳入不同參數時,會執行對應的方法
這個比較常見,比方說以下的Add方法,在傳入不同參數,或許是2參數、3個參數的時候會執行對應的方法:

using System;

class Calculator
{
    // 加法方法,接受兩個整數參數
    public int Add(int a, int b)
    {
        return a + b;
    }

    // 加法方法,接受兩個浮點數參數
    public double Add(double a, double b)
    {
        return a + b;
    }

    // 加法方法,接受三個整數參數
    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }
}

class Program
{
    static void Main()
    {
        Calculator calculator = new Calculator();

        int result1 = calculator.Add(5, 3);
        double result2 = calculator.Add(2.5, 3.7);
        int result3 = calculator.Add(1, 2, 3);

        Console.WriteLine($"結果1: {result1}");
        Console.WriteLine($"結果2: {result2}");
        Console.WriteLine($"結果3: {result3}");
    }
}

上一篇
常用的webconfig設定介紹(二) - 弱點掃描常用的webconfig設定
下一篇
EntityFramework介紹、安裝EntityFramework、LINQ介紹
系列文
研究visual studio+MSSQL各項技術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言